package hoserent.service;

import hoserent.domain.House;

/**
 * 定义 House[]，保存 House对象
 * 1. 响应 HouseView 的调用
 * 2. 完成对房屋信息的各种操作(增删改查)
 *    c[create] r[read] u[update] d[delete]
 */

public class HouseService {
    private House[] houses; // 保存 House对象
    private int houseNums = 1; // 记录当前有多少个房屋信息
    private int idCounter = 1; // 记录当前id增长

    //构造器
    public HouseService(int size) {
        // new house
        houses = new House[size]; // 当创建HouseService 对象，指定数组大小
        //测试
        houses[0] = new House(1, "jack", "112", "海淀区", 2000, "未出租");
    }

    //findById方法，返回House对象或者null
    public House findById(int findId) {
        for(int i = 0; i < houseNums; i++) {
            if(houses[i].getId() == findId) {
                return houses[i];
            }
        }
        return null;
    }

    //del方法，删除一个房屋信息
    public boolean del(int delId) {
        //应当先找到要删除的房屋信息对应的下标
        //注意：下标和房屋编号不是一回事
        int index = -1;
        for(int i = 0; i < houseNums; i++) {
            if(delId == houses[i].getId()) { // 要删除的房屋(id),是数组下标为i的元素
                index = i;
            }
        }
        if(index == -1) { // 说明delId在数组中不存在
            return false;
        }
        //如果找到了
        for(int i = index; i < houseNums - 1; i++) {
            houses[i] = houses[i + 1];
        }
        //把当前存在的房屋信息的最后一个设置为null
        houses[--houseNums] = null;
        return true;
    }

    //添加新对象，返回boolean值
    public boolean add(House newHouse) {
        //判断是否还可以继续添加（暂时不考虑数组扩容的问题）==>后面加入数组扩容机制
        if(houseNums >= houses.length) { // 不能再添加
            System.out.println("数组已满，不能再添加了...");
            return false;
        }
        //把newHouse对象加入到数组的最后
        houses[houseNums++] = newHouse;
        //需要设计一个id自增长的机制，然后更新newHouse的id
        newHouse.setId(++idCounter);
        return true;
    }

    //list方法，返回houses数组
    public House[] list() {
        return houses;
    }
}
